1 /**
2   hdf5.bindings.api
3 
4   Low level C API declarations
5 
6   D Language bindings to the HDF5 Library.  (Paired with a set of high-level wrappers)
7   https://github.com/Laeeth/d_hdf5
8   No restriction on use beyond those applying from HDF5 and the original C API by Stefan Frijters
9   However, if you use them, I would not mind knowing your application and suggestions for
10   improvement if you feel like sharing.  laeeth@laeeth.com
11 
12 
13 
14   Copyright by The HDF Group.                                               *
15   Copyright by the Board of Trustees of the University of Illinois.         *
16   All rights reserved.                                                      *
17                                                                             *
18   This file is part of HDF5.  The full HDF5 copyright notice, including     *
19   terms governing use, modification, and redistribution, is contained in    *
20   the files COPYING and Copyright.html.  COPYING can be found at the root   *
21   of the source code distribution tree; Copyright.html can be found at the  *
22   root level of an installed copy of the electronic HDF5 document set and   *
23   is linked from the top-level documents page.  It can also be found at     *
24   http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
25   access to either file, you may request a copy from help@hdfgroup.org.     *
26   * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
27   Ported to D by Laeeth Isharc 2014
28   Borrowed heavily in terms of C API declarations from https://github.com/SFrijters/hdf5-d
29   Stefan Frijters bindings for D
30 
31   Bindings probably not yet complete or bug-free.
32 
33   Consider this not even alpha stage.  It probably isn't so far away from being useful though.
34   This is written for Linux and will need modification to work on other platforms.
35 */
36 
37 module hdf5.bindings.api;
38 public import core.stdc.stdint;
39 public import core.sys.posix.sys.types: off_t;
40 public import core.stdc.time;
41 public import core.stdc.stdint;
42 import std.conv;
43 import std..string;
44 import std.array;
45 import std.stdio;
46 import hdf5.bindings.enums;
47 
48 auto H5check() {
49   return H5check_version(H5_VERS_MAJOR,H5_VERS_MINOR, H5_VERS_RELEASE);
50 }
51 
52 /* macros for comparing the version */
53 bool H5_VERSION_GE(Maj,Min,Rel)() {
54   return (((H5_VERS_MAJOR==Maj) && (H5_VERS_MINOR==Min) && (H5_VERS_RELEASE>=Rel)) ||
55         ((H5_VERS_MAJOR==Maj) && (H5_VERS_MINOR>Min)) ||
56           (H5_VERS_MAJOR>Maj));
57 }
58 
59 bool H5_VERSION_LE(Maj,Min,Rel)() {
60   return (((H5_VERS_MAJOR==Maj) && (H5_VERS_MINOR==Min) && (H5_VERS_RELEASE<=Rel)) ||
61         ((H5_VERS_MAJOR==Maj) && (H5_VERS_MINOR<Min)) ||
62           (H5_VERS_MAJOR<Maj));
63 }
64 version(Posix)
65 {
66   extern(C)
67   {
68     herr_t H5open();
69     herr_t H5close();
70     herr_t H5dont_atexit();
71     herr_t H5garbage_collect();
72     herr_t H5set_free_list_limits (int reg_global_lim, int reg_list_lim,
73                                    int arr_global_lim, int arr_list_lim, int blk_global_lim, int blk_list_lim);
74     herr_t H5get_libversion(uint *majnum, uint *minnum, uint *relnum);
75     herr_t H5check_version(uint majnum, uint minnum, uint relnum);
76     herr_t H5free_memory(void *mem);
77   }
78 }
79 
80     /* Define the operator function pointer for H5Diterate() */
81 extern(C)
82 {
83     hid_t H5Dcreate2(hid_t loc_id, const char *name, hid_t type_id,
84                      hid_t space_id, hid_t lcpl_id, hid_t dcpl_id, hid_t dapl_id);
85     hid_t H5Dcreate_anon(hid_t file_id, hid_t type_id, hid_t space_id, hid_t plist_id, hid_t dapl_id);
86     hid_t H5Dopen2(hid_t file_id, const char *name, hid_t dapl_id);
87     herr_t H5Dclose(hid_t dset_id);
88     hid_t H5Dget_space(hid_t dset_id);
89     herr_t H5Dget_space_status(hid_t dset_id, H5DSpaceStatus *allocation);
90     hid_t H5Dget_type(hid_t dset_id);
91     hid_t H5Dget_create_plist(hid_t dset_id);
92     hid_t H5Dget_access_plist(hid_t dset_id);
93     hsize_t H5Dget_storage_size(hid_t dset_id);
94     haddr_t H5Dget_offset(hid_t dset_id);
95     herr_t H5Dread(hid_t dset_id, hid_t mem_type_id, hid_t mem_space_id, hid_t file_space_id, hid_t plist_id, void *buf/*out*/);
96     herr_t H5Dwrite(hid_t dset_id, hid_t mem_type_id, hid_t mem_space_id, hid_t file_space_id, hid_t plist_id, const void *buf);
97     herr_t H5Diterate(void *buf, hid_t type_id, hid_t space_id, H5D_operator_t op, void *operator_data);
98     herr_t H5Dvlen_reclaim(hid_t type_id, hid_t space_id, hid_t plist_id, void *buf);
99     herr_t H5Dvlen_get_buf_size(hid_t dataset_id, hid_t type_id, hid_t space_id, hsize_t *size);
100     herr_t H5Dfill(const void *fill, hid_t fill_type, void *buf, hid_t buf_type, hid_t space);
101     herr_t H5Dset_extent(hid_t dset_id, const hsize_t* size);
102     herr_t H5Dscatter(H5D_scatter_func_t op, void *op_data, hid_t type_id, hid_t dst_space_id, void *dst_buf);
103     herr_t H5Dgather(hid_t src_space_id, const void *src_buf, hid_t type_id, size_t dst_buf_size, void *dst_buf, H5D_gather_func_t op, void *op_data);
104     herr_t H5Ddebug(hid_t dset_id);
105 }
106   extern(C)
107   {
108     // Public function prototypes
109 
110     hid_t   H5Acreate2(hid_t loc_id, const char *attr_name, hid_t type_id, hid_t space_id, hid_t acpl_id, hid_t aapl_id);
111     hid_t   H5Acreate_by_name(hid_t loc_id, const char *obj_name, const char *attr_name,
112         hid_t type_id, hid_t space_id, hid_t acpl_id, hid_t aapl_id, hid_t lapl_id);
113     hid_t   H5Aopen(hid_t obj_id, const char *attr_name, hid_t aapl_id);
114     hid_t   H5Aopen_by_name(hid_t loc_id, const char *obj_name, const char *attr_name, hid_t aapl_id, hid_t lapl_id);
115     hid_t   H5Aopen_by_idx(hid_t loc_id, const char *obj_name, H5Index idx_type, H5IterOrder order, hsize_t n, hid_t aapl_id,
116         hid_t lapl_id);
117     herr_t  H5Awrite(hid_t attr_id, hid_t type_id, const void *buf);
118     herr_t  H5Aread(hid_t attr_id, hid_t type_id, void *buf);
119     herr_t  H5Aclose(hid_t attr_id);
120     hid_t   H5Aget_space(hid_t attr_id);
121     hid_t   H5Aget_type(hid_t attr_id);
122     hid_t   H5Aget_create_plist(hid_t attr_id);
123     ssize_t H5Aget_name(hid_t attr_id, size_t buf_size, char *buf);
124     ssize_t H5Aget_name_by_idx(hid_t loc_id, const char *obj_name, H5Index idx_type, H5IterOrder order, hsize_t n,
125         char *name /*out*/, size_t size, hid_t lapl_id);
126     hsize_t H5Aget_storage_size(hid_t attr_id);
127     herr_t  H5Aget_info(hid_t attr_id, H5A_info_t *ainfo /*out*/);
128     herr_t  H5Aget_info_by_name(hid_t loc_id, const char *obj_name, const char *attr_name, H5A_info_t *ainfo /*out*/, hid_t lapl_id);
129     herr_t  H5Aget_info_by_idx(hid_t loc_id, const char *obj_name, H5Index idx_type, H5IterOrder order, hsize_t n,
130         H5A_info_t *ainfo /*out*/, hid_t lapl_id);
131     herr_t  H5Arename(hid_t loc_id, const char *old_name, const char *new_name);
132     herr_t  H5Arename_by_name(hid_t loc_id, const char *obj_name, const char *old_attr_name, const char *new_attr_name, hid_t lapl_id);
133     herr_t  H5Aiterate2(hid_t loc_id, H5Index idx_type, H5IterOrder order, hsize_t *idx, H5A_operator2_t op, void *op_data);
134     herr_t  H5Aiterate_by_name(hid_t loc_id, const char *obj_name, H5Index idx_type, H5IterOrder order, hsize_t *idx,
135          H5A_operator2_t op, void *op_data, hid_t lapd_id);
136     herr_t  H5Adelete(hid_t loc_id, const char *name);
137     herr_t  H5Adelete_by_name(hid_t loc_id, const char *obj_name, const char *attr_name, hid_t lapl_id);
138     herr_t  H5Adelete_by_idx(hid_t loc_id, const char *obj_name, H5Index idx_type, H5IterOrder order, hsize_t n, hid_t lapl_id);
139     htri_t H5Aexists(hid_t obj_id, const char *attr_name);
140     htri_t H5Aexists_by_name(hid_t obj_id, const char *obj_name, const char *attr_name, hid_t lapl_id);
141 }
142 
143   /* Global var whose value comes from environment variable */
144   /* (Defined in H5FDmpio.c) */
145   extern __gshared hbool_t H5FD_mpi_opt_types_g;
146 
147 extern(C)
148 {
149   /* Function prototypes */
150     hid_t H5FD_mpio_init();
151     void H5FD_mpio_term();
152     herr_t H5Pset_fapl_mpio(hid_t fapl_id, MPI_Comm comm, MPI_Info info);
153     herr_t H5Pget_fapl_mpio(hid_t fapl_id, MPI_Comm *comm/*out*/, MPI_Info *info/*out*/);
154     herr_t H5Pset_dxpl_mpio(hid_t dxpl_id, H5FDMPIO xfer_mode);
155     herr_t H5Pget_dxpl_mpio(hid_t dxpl_id, H5FDMPIO *xfer_mode/*out*/);
156     herr_t H5Pset_dxpl_mpio_collective_opt(hid_t dxpl_id, H5FDMPIO opt_mode);
157     herr_t H5Pset_dxpl_mpio_chunk_opt(hid_t dxpl_id, H5FDMPIOChunkOptions opt_mode);
158     herr_t H5Pset_dxpl_mpio_chunk_opt_num(hid_t dxpl_id, uint num_chunk_per_proc);
159     herr_t H5Pset_dxpl_mpio_chunk_opt_ratio(hid_t dxpl_id, uint percent_num_proc_per_chunk);
160 }
161 
162 
163 
164   extern(C)
165   {
166     htri_t H5Fis_hdf5(const char *filename);
167     hid_t  H5Fcreate(const char *filename, uint flags, hid_t create_plist, hid_t access_plist);
168     hid_t  H5Fopen(const char *filename, uint flags, hid_t access_plist);
169     hid_t  H5Freopen(hid_t file_id);
170     herr_t H5Fflush(hid_t object_id, H5F_scope_t _scope);
171     herr_t H5Fclose(hid_t file_id);
172     hid_t  H5Fget_create_plist(hid_t file_id);
173     hid_t  H5Fget_access_plist(hid_t file_id);
174     herr_t H5Fget_intent(hid_t file_id, uint * intent);
175     ssize_t H5Fget_obj_count(hid_t file_id, uint types);
176     ssize_t H5Fget_obj_ids(hid_t file_id, uint types, size_t max_objs, hid_t *obj_id_list);
177     herr_t H5Fget_vfd_handle(hid_t file_id, hid_t fapl, void **file_handle);
178     herr_t H5Fmount(hid_t loc, const char *name, hid_t child, hid_t plist);
179     herr_t H5Funmount(hid_t loc, const char *name);
180     hssize_t H5Fget_freespace(hid_t file_id);
181     herr_t H5Fget_filesize(hid_t file_id, hsize_t *size);
182     ssize_t H5Fget_file_image(hid_t file_id, void * buf_ptr, size_t buf_len);
183     herr_t H5Fget_mdc_hit_rate(hid_t file_id, double * hit_rate_ptr);
184     herr_t H5Fget_mdc_size(hid_t file_id, size_t * max_size_ptr, size_t * min_clean_size_ptr, size_t * cur_size_ptr, int * cur_num_entries_ptr);
185     herr_t H5Freset_mdc_hit_rate_stats(hid_t file_id);
186     ssize_t H5Fget_name(hid_t obj_id, char *name, size_t size);
187     herr_t H5Fget_info(hid_t obj_id, H5F_info_t *bh_info);
188     herr_t H5Fclear_elink_file_cache(hid_t file_id);
189     version(h5parallel) herr_t H5Fset_mpi_atomicity(hid_t file_id, hbool_t flag);
190     version(h5parallel) herr_t H5Fget_mpi_atomicity(hid_t file_id, hbool_t *flag);
191     version(h5parallel) alias H5FD_MPIO=H5FD_mpio_init;
192 }
193 extern(C)
194 {
195   hid_t H5Gcreate2(hid_t loc_id, const char *name, hid_t lcpl_id, hid_t gcpl_id, hid_t gapl_id);
196   hid_t H5Gcreate_anon(hid_t loc_id, hid_t gcpl_id, hid_t gapl_id);
197   hid_t H5Gopen2(hid_t loc_id, const char *name, hid_t gapl_id);
198   hid_t H5Gget_create_plist(hid_t group_id);
199   herr_t H5Gget_info(hid_t loc_id, H5GInfo *ginfo);
200   herr_t H5Gget_info_by_name(hid_t loc_id, const(char *)name, H5GInfo *ginfo, hid_t lapl_id);
201   herr_t H5Gget_info_by_idx(hid_t loc_id, const(char *)group_name, H5Index idx_type, H5IterOrder order, hsize_t n, H5GInfo *ginfo, hid_t lapl_id);
202   herr_t H5Gclose(hid_t group_id);
203 }
204 
205   extern(C)
206   {
207     hid_t H5Iregister(H5IType type, const void *object);
208     void *H5Iobject_verify(hid_t id, H5IType id_type);
209     void *H5Iremove_verify(hid_t id, H5IType id_type);
210     H5IType H5Iget_type(hid_t id);
211     hid_t H5Iget_file_id(hid_t id);
212     ssize_t H5Iget_name(hid_t id, char *name/*out*/, size_t size);
213     int H5Iinc_ref(hid_t id);
214     int H5Idec_ref(hid_t id);
215     int H5Iget_ref(hid_t id);
216     H5IType H5Iregister_type(size_t hash_size, uint reserved, H5I_free_t free_func);
217     herr_t H5Iclear_type(H5IType type, hbool_t force);
218     herr_t H5Idestroy_type(H5IType type);
219     int H5Iinc_type_ref(H5IType type);
220     int H5Idec_type_ref(H5IType type);
221     int H5Iget_type_ref(H5IType type);
222     void *H5Isearch(H5IType type, H5I_search_func_t func, void *key);
223     herr_t H5Inmembers(H5IType type, hsize_t *num_members);
224     htri_t H5Itype_exists(H5IType type);
225     htri_t H5Iis_valid(hid_t id);
226   }
227   extern(C)
228   {
229     herr_t H5Lmove(hid_t src_loc, const char *src_name, hid_t dst_loc, const char *dst_name, hid_t lcpl_id, hid_t lapl_id);
230     herr_t H5Lcopy(hid_t src_loc, const char *src_name, hid_t dst_loc, const char *dst_name, hid_t lcpl_id, hid_t lapl_id);
231     herr_t H5Lcreate_hard(hid_t cur_loc, const char *cur_name, hid_t dst_loc, const char *dst_name, hid_t lcpl_id, hid_t lapl_id);
232     herr_t H5Lcreate_soft(const char *link_target, hid_t link_loc_id, const char *link_name, hid_t lcpl_id, hid_t lapl_id);
233     herr_t H5Ldelete(hid_t loc_id, const char *name, hid_t lapl_id);
234     herr_t H5Ldelete_by_idx(hid_t loc_id, const char *group_name, H5Index idx_type, H5IterOrder order, hsize_t n, hid_t lapl_id);
235     herr_t H5Lget_val(hid_t loc_id, const char *name, void *buf/*out*/, size_t size, hid_t lapl_id);
236     herr_t H5Lget_val_by_idx(hid_t loc_id, const char *group_name, H5Index idx_type, H5IterOrder order, hsize_t n, void *buf/*out*/, size_t size, hid_t lapl_id);
237     htri_t H5Lexists(hid_t loc_id, const char *name, hid_t lapl_id);
238     herr_t H5Lget_info(hid_t loc_id, const char *name, H5LInfo *linfo /*out*/, hid_t lapl_id);
239     herr_t H5Lget_info_by_idx(hid_t loc_id, const char *group_name, H5Index idx_type, H5IterOrder order, hsize_t n, H5LInfo *linfo /*out*/, hid_t lapl_id); ssize_t H5Lget_name_by_idx(hid_t loc_id, const char *group_name, H5Index idx_type, H5IterOrder order, hsize_t n, char *name /*out*/, size_t size, hid_t lapl_id);
240     herr_t H5Literate(hid_t grp_id, H5Index idx_type, H5IterOrder order, hsize_t *idx, H5L_iterate_t op, void *op_data);
241     herr_t H5Literate_by_name(hid_t loc_id, const char *group_name, H5Index idx_type, H5IterOrder order, hsize_t *idx, H5L_iterate_t op, void *op_data, hid_t lapl_id);
242     herr_t H5Lvisit(hid_t grp_id, H5Index idx_type, H5IterOrder order, H5L_iterate_t op, void *op_data);
243     herr_t H5Lvisit_by_name(hid_t loc_id, const char *group_name, H5Index idx_type, H5IterOrder order, H5L_iterate_t op, void *op_data, hid_t lapl_id);
244 
245     /* UD link functions */
246     herr_t H5Lcreate_ud(hid_t link_loc_id, const char *link_name, H5LType link_type, const void *udata, size_t udata_size, hid_t lcpl_id, hid_t lapl_id);
247     herr_t H5Lregister(const H5L_class_t *cls);
248     herr_t H5Lunregister(H5LType id);
249     htri_t H5Lis_registered(H5LType id);
250 
251     /* External link functions */
252     herr_t H5Lunpack_elink_val(const void *ext_linkval/*in*/, size_t link_size, uint *flags, const char **filename/*out*/, const char **obj_path /*out*/);
253     herr_t H5Lcreate_external(const char *file_name, const char *obj_name, hid_t link_loc_id, const char *link_name, hid_t lcpl_id, hid_t lapl_id);
254   }
255 
256 
257 extern(C)
258 {
259     hid_t H5Oopen(hid_t loc_id, const char *name, hid_t lapl_id);
260     hid_t H5Oopen_by_addr(hid_t loc_id, haddr_t addr);
261     hid_t H5Oopen_by_idx(hid_t loc_id, const char *group_name, H5Index idx_type, H5IterOrder order, hsize_t n, hid_t lapl_id);
262     htri_t H5Oexists_by_name(hid_t loc_id, const char *name, hid_t lapl_id);
263     herr_t H5Oget_info(hid_t loc_id, H5OInfo  *oinfo);
264     herr_t H5Oget_info_by_name(hid_t loc_id, const (char *)name, H5OInfo  *oinfo, hid_t lapl_id);
265     herr_t H5Oget_info_by_idx(hid_t loc_id, const char *group_name, H5Index idx_type, H5IterOrder order, hsize_t n, H5OInfo  *oinfo, hid_t lapl_id);
266     herr_t H5Olink(hid_t obj_id, hid_t new_loc_id, const char *new_name, hid_t lcpl_id, hid_t lapl_id);
267     herr_t H5Oincr_refcount(hid_t object_id);
268     herr_t H5Odecr_refcount(hid_t object_id);
269     herr_t H5Ocopy(hid_t src_loc_id, const char *src_name, hid_t dst_loc_id, const char *dst_name, hid_t ocpypl_id, hid_t lcpl_id);
270     herr_t H5Oset_comment(hid_t obj_id, const char *comment);
271     herr_t H5Oset_comment_by_name(hid_t loc_id, const char *name, const char *comment, hid_t lapl_id);
272     ssize_t H5Oget_comment(hid_t obj_id, char *comment, size_t bufsize);
273     ssize_t H5Oget_comment_by_name(hid_t loc_id, const char *name, char *comment, size_t bufsize, hid_t lapl_id);
274     herr_t H5Ovisit(hid_t obj_id, H5Index idx_type, H5IterOrder order, H5O_iterate_t op, void *op_data);
275     herr_t H5Ovisit_by_name(hid_t loc_id, const char *obj_name, H5Index idx_type, H5IterOrder order, H5O_iterate_t op, void *op_data, hid_t lapl_id);
276     herr_t H5Oclose(hid_t object_id);
277   /*****************/
278     /* Public Macros */
279     /*****************/
280 
281     /*
282      * The library's property list classes
283      */
284     alias H5P_ROOT              =H5P_CLS_ROOT_ID_g;
285     alias H5P_OBJECT_CREATE     =H5P_CLS_OBJECT_CREATE_ID_g;
286     alias H5P_FILE_CREATE       =H5P_CLS_FILE_CREATE_ID_g;
287     alias H5P_FILE_ACCESS       =H5P_CLS_FILE_ACCESS_ID_g;
288     alias H5P_DATASET_CREATE     =   H5P_CLS_DATASET_CREATE_ID_g;
289     alias H5P_DATASET_ACCESS      =  H5P_CLS_DATASET_ACCESS_ID_g;
290     alias H5P_DATASET_XFER         = H5P_CLS_DATASET_XFER_ID_g;
291     alias H5P_FILE_MOUNT          =H5P_CLS_FILE_MOUNT_ID_g;
292     alias H5P_GROUP_CREATE    =H5P_CLS_GROUP_CREATE_ID_g;
293     alias H5P_GROUP_ACCESS    =H5P_CLS_GROUP_ACCESS_ID_g;
294     alias H5P_DATATYPE_CREATE  =   H5P_CLS_DATATYPE_CREATE_ID_g;
295     alias H5P_DATATYPE_ACCESS   =  H5P_CLS_DATATYPE_ACCESS_ID_g;
296     alias H5P_STRING_CREATE     =H5P_CLS_STRING_CREATE_ID_g;
297     alias H5P_ATTRIBUTE_CREATE   = H5P_CLS_ATTRIBUTE_CREATE_ID_g;
298     alias H5P_OBJECT_COPY     =H5P_CLS_OBJECT_COPY_ID_g;
299     alias H5P_LINK_CREATE     =H5P_CLS_LINK_CREATE_ID_g;
300     alias H5P_LINK_ACCESS     =H5P_CLS_LINK_ACCESS_ID_g;
301 
302     /*
303      * The library's default property lists
304      */
305     alias H5P_FILE_CREATE_DEFAULT   =H5P_LST_FILE_CREATE_ID_g;
306     alias H5P_FILE_ACCESS_DEFAULT   =H5P_LST_FILE_ACCESS_ID_g;
307     alias H5P_DATASET_CREATE_DEFAULT =   H5P_LST_DATASET_CREATE_ID_g;
308     alias H5P_DATASET_ACCESS_DEFAULT  =  H5P_LST_DATASET_ACCESS_ID_g;
309     alias H5P_DATASET_XFER_DEFAULT    =H5P_LST_DATASET_XFER_ID_g;
310     alias H5P_FILE_MOUNT_DEFAULT      =  H5P_LST_FILE_MOUNT_ID_g;
311     alias H5P_GROUP_CREATE_DEFAULT  =H5P_LST_GROUP_CREATE_ID_g;
312     alias H5P_GROUP_ACCESS_DEFAULT  =H5P_LST_GROUP_ACCESS_ID_g;
313     alias H5P_DATATYPE_CREATE_DEFAULT= H5P_LST_DATATYPE_CREATE_ID_g;
314     alias H5P_DATATYPE_ACCESS_DEFAULT =  H5P_LST_DATATYPE_ACCESS_ID_g;
315     alias H5P_ATTRIBUTE_CREATE_DEFAULT = H5P_LST_ATTRIBUTE_CREATE_ID_g;
316     alias H5P_OBJECT_COPY_DEFAULT   =H5P_LST_OBJECT_COPY_ID_g;
317     alias H5P_LINK_CREATE_DEFAULT   =H5P_LST_LINK_CREATE_ID_g;
318     alias H5P_LINK_ACCESS_DEFAULT   =H5P_LST_LINK_ACCESS_ID_g;
319 
320     extern __gshared hid_t H5P_CLS_ROOT_g;
321     extern __gshared hid_t H5P_CLS_OBJECT_CREATE_g;
322     extern __gshared hid_t H5P_CLS_FILE_CREATE_g;
323     extern __gshared hid_t H5P_CLS_FILE_ACCESS_g;
324     extern __gshared hid_t H5P_CLS_DATASET_CREATE_g;
325     extern __gshared hid_t H5P_CLS_DATASET_ACCESS_g;
326     extern __gshared hid_t H5P_CLS_DATASET_XFER_g;
327     extern __gshared hid_t H5P_CLS_FILE_MOUNT_g;
328     extern __gshared hid_t H5P_CLS_GROUP_CREATE_g;
329     extern __gshared hid_t H5P_CLS_GROUP_ACCESS_g;
330     extern __gshared hid_t H5P_CLS_DATATYPE_CREATE_g;
331     extern __gshared hid_t H5P_CLS_DATATYPE_ACCESS_g;
332     extern __gshared hid_t H5P_CLS_STRING_CREATE_g;
333     extern __gshared hid_t H5P_CLS_ATTRIBUTE_CREATE_g;
334     extern __gshared hid_t H5P_CLS_OBJECT_COPY_g;
335     extern __gshared hid_t H5P_CLS_LINK_CREATE_g;
336     extern __gshared hid_t H5P_CLS_LINK_ACCESS_g;
337 
338     /* Default roperty list IDs */
339     /* (Internal to library, do not use!  Use macros above) */
340     extern __gshared hid_t H5P_LST_FILE_CREATE_g;
341     extern __gshared hid_t H5P_LST_FILE_ACCESS_g;
342     extern __gshared hid_t H5P_LST_DATASET_CREATE_g;
343     extern __gshared hid_t H5P_LST_DATASET_ACCESS_g;
344     extern __gshared hid_t H5P_LST_DATASET_XFER_g;
345     extern __gshared hid_t H5P_LST_FILE_MOUNT_g;
346     extern __gshared hid_t H5P_LST_GROUP_CREATE_g;
347     extern __gshared hid_t H5P_LST_GROUP_ACCESS_g;
348     extern __gshared hid_t H5P_LST_DATATYPE_CREATE_g;
349     extern __gshared hid_t H5P_LST_DATATYPE_ACCESS_g;
350     extern __gshared hid_t H5P_LST_ATTRIBUTE_CREATE_g;
351     extern __gshared hid_t H5P_LST_OBJECT_COPY_g;
352     extern __gshared hid_t H5P_LST_LINK_CREATE_g;
353     extern __gshared hid_t H5P_LST_LINK_ACCESS_g;
354 
355 
356     extern __gshared hid_t H5P_CLS_ROOT_ID_g;
357     extern __gshared hid_t H5P_CLS_OBJECT_CREATE_ID_g;
358     extern __gshared hid_t H5P_CLS_FILE_CREATE_ID_g;
359     extern __gshared hid_t H5P_CLS_FILE_ACCESS_ID_g;
360     extern __gshared hid_t H5P_CLS_DATASET_CREATE_ID_g;
361     extern __gshared hid_t H5P_CLS_DATASET_ACCESS_ID_g;
362     extern __gshared hid_t H5P_CLS_DATASET_XFER_ID_g;
363     extern __gshared hid_t H5P_CLS_FILE_MOUNT_ID_g;
364     extern __gshared hid_t H5P_CLS_GROUP_CREATE_ID_g;
365     extern __gshared hid_t H5P_CLS_GROUP_ACCESS_ID_g;
366     extern __gshared hid_t H5P_CLS_DATATYPE_CREATE_ID_g;
367     extern __gshared hid_t H5P_CLS_DATATYPE_ACCESS_ID_g;
368     extern __gshared hid_t H5P_CLS_STRING_CREATE_ID_g;
369     extern __gshared hid_t H5P_CLS_ATTRIBUTE_CREATE_ID_g;
370     extern __gshared hid_t H5P_CLS_OBJECT_COPY_ID_g;
371     extern __gshared hid_t H5P_CLS_LINK_CREATE_ID_g;
372     extern __gshared hid_t H5P_CLS_LINK_ACCESS_ID_g;
373 
374     /* Default roperty list IDs */
375     /* (Internal to library, do not use!  Use macros above) */
376     extern __gshared hid_t H5P_LST_FILE_CREATE_ID_g;
377     extern __gshared hid_t H5P_LST_FILE_ACCESS_ID_g;
378     extern __gshared hid_t H5P_LST_DATASET_CREATE_ID_g;
379     extern __gshared hid_t H5P_LST_DATASET_ACCESS_ID_g;
380     extern __gshared hid_t H5P_LST_DATASET_XFER_ID_g;
381     extern __gshared hid_t H5P_LST_FILE_MOUNT_ID_g;
382     extern __gshared hid_t H5P_LST_GROUP_CREATE_ID_g;
383     extern __gshared hid_t H5P_LST_GROUP_ACCESS_ID_g;
384     extern __gshared hid_t H5P_LST_DATATYPE_CREATE_ID_g;
385     extern __gshared hid_t H5P_LST_DATATYPE_ACCESS_ID_g;
386     extern __gshared hid_t H5P_LST_ATTRIBUTE_CREATE_ID_g;
387     extern __gshared hid_t H5P_LST_OBJECT_COPY_ID_g;
388     extern __gshared hid_t H5P_LST_LINK_CREATE_ID_g;
389     extern __gshared hid_t H5P_LST_LINK_ACCESS_ID_g;
390 
391     /* Generic property list routines */
392     hid_t H5Pcreate_class(hid_t parent, const char *name, H5P_cls_create_func_t cls_create, void *create_data,
393         H5P_cls_copy_func_t cls_copy, void *copy_data, H5P_cls_close_func_t cls_close, void *close_data);
394     char *H5Pget_class_name(hid_t pclass_id);
395     hid_t H5Pcreate(hid_t cls_id);
396     herr_t H5Pregister2(hid_t cls_id, const char *name, size_t size, void *def_value, H5P_prp_create_func_t prp_create,
397         H5P_prp_set_func_t prp_set, H5P_prp_get_func_t prp_get, H5P_prp_delete_func_t prp_del, H5P_prp_copy_func_t prp_copy,
398         H5P_prp_compare_func_t prp_cmp, H5P_prp_close_func_t prp_close);
399     herr_t H5Pinsert2(hid_t plist_id, const char *name, size_t size,
400         void *value, H5P_prp_set_func_t prp_set, H5P_prp_get_func_t prp_get,
401         H5P_prp_delete_func_t prp_delete, H5P_prp_copy_func_t prp_copy,
402         H5P_prp_compare_func_t prp_cmp, H5P_prp_close_func_t prp_close);
403     herr_t H5Pset(hid_t plist_id, const char *name, void *value);
404     htri_t H5Pexist(hid_t plist_id, const char *name);
405     herr_t H5Pget_size(hid_t id, const char *name, size_t *size);
406     herr_t H5Pget_nprops(hid_t id, size_t *nprops);
407     hid_t H5Pget_class(hid_t plist_id);
408     hid_t H5Pget_class_parent(hid_t pclass_id);
409     herr_t H5Pget(hid_t plist_id, const char *name, void * value);
410     htri_t H5Pequal(hid_t id1, hid_t id2);
411     htri_t H5Pisa_class(hid_t plist_id, hid_t pclass_id);
412     int H5Piterate(hid_t id, int *idx, H5P_iterate_t iter_func,
413                 void *iter_data);
414     herr_t H5Pcopy_prop(hid_t dst_id, hid_t src_id, const char *name);
415     herr_t H5Premove(hid_t plist_id, const char *name);
416     herr_t H5Punregister(hid_t pclass_id, const char *name);
417     herr_t H5Pclose_class(hid_t plist_id);
418     herr_t H5Pclose(hid_t plist_id);
419     hid_t H5Pcopy(hid_t plist_id);
420 
421     /* Object creation property list (OCPL) routines */
422     herr_t H5Pset_attr_phase_change(hid_t plist_id, uint max_compact, uint min_dense);
423     herr_t H5Pget_attr_phase_change(hid_t plist_id, uint *max_compact, uint *min_dense);
424     herr_t H5Pset_attr_creation_order(hid_t plist_id, uint crt_order_flags);
425     herr_t H5Pget_attr_creation_order(hid_t plist_id, uint *crt_order_flags);
426     herr_t H5Pset_obj_track_times(hid_t plist_id, hbool_t track_times);
427     herr_t H5Pget_obj_track_times(hid_t plist_id, hbool_t *track_times);
428     herr_t H5Pmodify_filter(hid_t plist_id, H5ZFilter filter,
429             int flags, size_t cd_nelmts,
430             const int* cd_values);
431     herr_t H5Pset_filter(hid_t plist_id, H5ZFilter filter, int flags, size_t cd_nelmts, const int* c_values);
432     int H5Pget_nfilters(hid_t plist_id);
433     H5ZFilter H5Pget_filter2(hid_t plist_id, uint filter,
434            int *flags/*out*/,
435            size_t *cd_nelmts/*out*/,
436            uint* cd_values/*out*/,
437            size_t namelen, char* name,
438            uint *filter_config /*out*/);
439     herr_t H5Pget_filter_by_id2(hid_t plist_id, H5ZFilter id,
440            uint *flags/*out*/, size_t *cd_nelmts/*out*/,
441            int* cd_values/*out*/, size_t namelen, char* name/*out*/,
442            int *filter_config/*out*/);
443     htri_t H5Pall_filters_avail(hid_t plist_id);
444     herr_t H5Premove_filter(hid_t plist_id, H5ZFilter filter);
445     herr_t H5Pset_deflate(hid_t plist_id, int aggression);
446     herr_t H5Pset_fletcher32(hid_t plist_id);
447 
448     /* File creation property list (FCPL) routines */
449     herr_t H5Pget_version(hid_t plist_id, uint *boot/*out*/,
450              uint *freelist/*out*/, uint *stab/*out*/,
451              uint *shhdr/*out*/);
452     herr_t H5Pset_userblock(hid_t plist_id, hsize_t size);
453     herr_t H5Pget_userblock(hid_t plist_id, hsize_t *size);
454     herr_t H5Pset_sizes(hid_t plist_id, size_t sizeof_addr,
455            size_t sizeof_size);
456     herr_t H5Pget_sizes(hid_t plist_id, size_t *sizeof_addr/*out*/,
457            size_t *sizeof_size/*out*/);
458     herr_t H5Pset_sym_k(hid_t plist_id, uint ik, uint lk);
459     herr_t H5Pget_sym_k(hid_t plist_id, uint *ik/*out*/, uint *lk/*out*/);
460     herr_t H5Pset_istore_k(hid_t plist_id, uint ik);
461     herr_t H5Pget_istore_k(hid_t plist_id, uint *ik/*out*/);
462     herr_t H5Pset_shared_mesg_nindexes(hid_t plist_id, uint nindexes);
463     herr_t H5Pget_shared_mesg_nindexes(hid_t plist_id, uint *nindexes);
464     herr_t H5Pset_shared_mesg_index(hid_t plist_id, uint index_num, uint mesg_type_flags, uint min_mesg_size);
465     herr_t H5Pget_shared_mesg_index(hid_t plist_id, uint index_num, uint *mesg_type_flags, uint *min_mesg_size);
466     herr_t H5Pset_shared_mesg_phase_change(hid_t plist_id, uint max_list, uint min_btree);
467     herr_t H5Pget_shared_mesg_phase_change(hid_t plist_id, uint *max_list, uint *min_btree);
468 
469     /* File access property list (FAPL) routines */
470     herr_t H5Pset_alignment(hid_t fapl_id, hsize_t threshold,
471         hsize_t alignment);
472     herr_t H5Pget_alignment(hid_t fapl_id, hsize_t *threshold/*out*/,
473         hsize_t *alignment/*out*/);
474     herr_t H5Pset_driver(hid_t plist_id, hid_t driver_id,
475             const void *driver_info);
476     hid_t H5Pget_driver(hid_t plist_id);
477     void *H5Pget_driver_info(hid_t plist_id);
478     herr_t H5Pset_family_offset(hid_t fapl_id, hsize_t offset);
479     herr_t H5Pget_family_offset(hid_t fapl_id, hsize_t *offset);
480     herr_t H5Pset_cache(hid_t plist_id, int mdc_nelmts,
481            size_t rdcc_nslots, size_t rdcc_nbytes,
482            double rdcc_w0);
483     herr_t H5Pget_cache(hid_t plist_id,
484            int *mdc_nelmts, /* out */
485            size_t *rdcc_nslots/*out*/,
486            size_t *rdcc_nbytes/*out*/, double *rdcc_w0);
487     herr_t H5Pset_gc_references(hid_t fapl_id, uint gc_ref);
488     herr_t H5Pget_gc_references(hid_t fapl_id, uint *gc_ref/*out*/);
489     herr_t H5Pset_fclose_degree(hid_t fapl_id, H5F_close_degree_t degree);
490     herr_t H5Pget_fclose_degree(hid_t fapl_id, H5F_close_degree_t *degree);
491     herr_t H5Pset_meta_block_size(hid_t fapl_id, hsize_t size);
492     herr_t H5Pget_meta_block_size(hid_t fapl_id, hsize_t *size/*out*/);
493     herr_t H5Pset_sieve_buf_size(hid_t fapl_id, size_t size);
494     herr_t H5Pget_sieve_buf_size(hid_t fapl_id, size_t *size/*out*/);
495     herr_t H5Pset_small_data_block_size(hid_t fapl_id, hsize_t size);
496     herr_t H5Pget_small_data_block_size(hid_t fapl_id, hsize_t *size/*out*/);
497     herr_t H5Pset_libver_bounds(hid_t plist_id, H5F_libver_t low,
498         H5F_libver_t high);
499     herr_t H5Pget_libver_bounds(hid_t plist_id, H5F_libver_t *low,
500         H5F_libver_t *high);
501     herr_t H5Pset_elink_file_cache_size(hid_t plist_id, uint efc_size);
502     herr_t H5Pget_elink_file_cache_size(hid_t plist_id, uint *efc_size);
503     herr_t H5Pset_file_image(hid_t fapl_id, void *buf_ptr, size_t buf_len);
504     herr_t H5Pget_file_image(hid_t fapl_id, void **buf_ptr_ptr, size_t *buf_len_ptr);
505     version(h5parallel) herr_t H5Pset_core_write_tracking(hid_t fapl_id, hbool_t is_enabled, size_t page_size);
506     version(h5parallel) herr_t H5Pget_core_write_tracking(hid_t fapl_id, hbool_t *is_enabled, size_t *page_size);
507     herr_t H5Pset_layout(hid_t plist_id, H5DLayout layout);
508     H5DLayout H5Pget_layout(hid_t plist_id);
509     herr_t H5Pset_chunk(hid_t plist_id, int ndims, const hsize_t *dim/*ndims*/);
510     int H5Pget_chunk(hid_t plist_id, int max_ndims, hsize_t *dim/*out*/);
511     herr_t H5Pset_external(hid_t plist_id, const char *name, off_t offset,
512               hsize_t size);
513     int H5Pget_external_count(hid_t plist_id);
514     herr_t H5Pget_external(hid_t plist_id, uint idx, size_t name_size,
515               char *name/*out*/, off_t *offset/*out*/,
516               hsize_t *size/*out*/);
517     herr_t H5Pset_szip(hid_t plist_id, uint options_mask, uint pixels_per_block);
518     herr_t H5Pset_shuffle(hid_t plist_id);
519     herr_t H5Pset_nbit(hid_t plist_id);
520     herr_t H5Pset_scaleoffset(hid_t plist_id, H5Z_SO_scale_type_t scale_type, int scale_factor);
521     herr_t H5Pset_fill_value(hid_t plist_id, hid_t type_id, const void *value);
522     herr_t H5Pget_fill_value(hid_t plist_id, hid_t type_id, void *value/*out*/);
523     herr_t H5Pfill_value_defined(hid_t plist, H5D_fill_value_t *status);
524     herr_t H5Pset_alloc_time(hid_t plist_id, H5DAllocTime alloc_time);
525     herr_t H5Pget_alloc_time(hid_t plist_id, H5DAllocTime *alloc_time/*out*/);
526     herr_t H5Pset_fill_time(hid_t plist_id, H5D_fill_time_t fill_time);
527     herr_t H5Pget_fill_time(hid_t plist_id, H5D_fill_time_t *fill_time/*out*/);
528 
529     /* Dataset access property list (DAPL) routines */
530     herr_t H5Pset_chunk_cache(hid_t dapl_id, size_t rdcc_nslots,
531            size_t rdcc_nbytes, double rdcc_w0);
532     herr_t H5Pget_chunk_cache(hid_t dapl_id,
533            size_t *rdcc_nslots/*out*/,
534            size_t *rdcc_nbytes/*out*/,
535            double *rdcc_w0/*out*/);
536 
537     /* Dataset xfer property list (DXPL) routines */
538     herr_t H5Pset_data_transform(hid_t plist_id, const char* expression);
539     ssize_t H5Pget_data_transform(hid_t plist_id, char* expression /*out*/, size_t size);
540     herr_t H5Pset_buffer(hid_t plist_id, size_t size, void *tconv,
541             void *bkg);
542     size_t H5Pget_buffer(hid_t plist_id, void **tconv/*out*/,
543             void **bkg/*out*/);
544     herr_t H5Pset_preserve(hid_t plist_id, hbool_t status);
545     int H5Pget_preserve(hid_t plist_id);
546     herr_t H5Pset_edc_check(hid_t plist_id, H5Z_EDC_t check);
547     H5Z_EDC_t H5Pget_edc_check(hid_t plist_id);
548     herr_t H5Pset_filter_callback(hid_t plist_id, H5Z_filter_func_t func,
549                                          void* op_data);
550     herr_t H5Pset_btree_ratios(hid_t plist_id, double left, double middle,
551            double right);
552     herr_t H5Pget_btree_ratios(hid_t plist_id, double *left/*out*/,
553            double *middle/*out*/,
554            double *right/*out*/);
555     herr_t H5Pset_hyper_vector_size(hid_t fapl_id, size_t size);
556     herr_t H5Pget_hyper_vector_size(hid_t fapl_id, size_t *size/*out*/);
557     herr_t H5Pset_type_conv_cb(hid_t dxpl_id, H5T_conv_except_func_t op, void* operate_data);
558     herr_t H5Pget_type_conv_cb(hid_t dxpl_id, H5T_conv_except_func_t *op, void** operate_data);
559     version(h5parallel)
560     {
561       herr_t H5Pget_mpio_actual_chunk_opt_mode(hid_t plist_id, H5D_mpio_actual_chunk_opt_mode_t *actual_chunk_opt_mode);
562       herr_t H5Pget_mpio_actual_io_mode(hid_t plist_id, H5D_mpio_actual_io_mode_t *actual_io_mode);
563       herr_t H5Pget_mpio_no_collective_cause(hid_t plist_id, uint32_t *local_no_collective_cause, uint32_t *global_no_collective_cause);
564     }
565 
566     /* Link creation property list (LCPL) routines */
567     herr_t H5Pset_create_intermediate_group(hid_t plist_id, uint crt_intmd);
568     herr_t H5Pget_create_intermediate_group(hid_t plist_id, uint *crt_intmd /*out*/);
569 
570     /* Group creation property list (GCPL) routines */
571     herr_t H5Pset_local_heap_size_hint(hid_t plist_id, size_t size_hint);
572     herr_t H5Pget_local_heap_size_hint(hid_t plist_id, size_t *size_hint /*out*/);
573     herr_t H5Pset_link_phase_change(hid_t plist_id, uint max_compact, uint min_dense);
574     herr_t H5Pget_link_phase_change(hid_t plist_id, uint *max_compact /*out*/, uint *min_dense /*out*/);
575     herr_t H5Pset_est_link_info(hid_t plist_id, uint est_num_entries, uint est_name_len);
576     herr_t H5Pget_est_link_info(hid_t plist_id, uint *est_num_entries /* out */, uint *est_name_len /* out */);
577     herr_t H5Pset_link_creation_order(hid_t plist_id, uint crt_order_flags);
578     herr_t H5Pget_link_creation_order(hid_t plist_id, uint *crt_order_flags /* out */);
579 
580     /* String creation property list (STRCPL) routines */
581     herr_t H5Pset_char_encoding(hid_t plist_id, H5TCset encoding);
582     herr_t H5Pget_char_encoding(hid_t plist_id, H5TCset *encoding /*out*/);
583 
584     /* Link access property list (LAPL) routines */
585     herr_t H5Pset_nlinks(hid_t plist_id, size_t nlinks);
586     herr_t H5Pget_nlinks(hid_t plist_id, size_t *nlinks);
587     herr_t H5Pset_elink_prefix(hid_t plist_id, const char *prefix);
588     ssize_t H5Pget_elink_prefix(hid_t plist_id, char *prefix, size_t size);
589     hid_t H5Pget_elink_fapl(hid_t lapl_id);
590     herr_t H5Pset_elink_fapl(hid_t lapl_id, hid_t fapl_id);
591     herr_t H5Pset_elink_acc_flags(hid_t lapl_id, uint flags);
592     herr_t H5Pget_elink_acc_flags(hid_t lapl_id, uint *flags);
593     /++
594     herr_t H5Pset_elink_cb(hid_t lapl_id, H5L_elink_traverse_t func, void *op_data);
595     herr_t H5Pget_elink_cb(hid_t lapl_id, H5L_elink_traverse_t *func, void **op_data);
596     +/
597 
598     /* Object copy property list (OCPYPL) routines */
599     herr_t H5Pset_copy_object(hid_t plist_id, uint crt_intmd);
600     herr_t H5Pget_copy_object(hid_t plist_id, uint *crt_intmd /*out*/);
601     herr_t H5Padd_merge_committed_dtype_path(hid_t plist_id, const char *path);
602     herr_t H5Pfree_merge_committed_dtype_paths(hid_t plist_id);
603     /++
604     herr_t H5Pset_mcdt_search_cb(hid_t plist_id, H5O_mcdt_search_cb_t func, void *op_data);
605     herr_t H5Pget_mcdt_search_cb(hid_t plist_id, H5O_mcdt_search_cb_t *func, void **op_data);
606     +/
607 
608    herr_t H5Rcreate(void *_ref, hid_t loc_id, const char *name, H5RType reftype, hid_t space_id);
609    hid_t H5Rdereference(hid_t dataset, H5RType ref_type, const void *_ref);
610    hid_t H5Rget_region(hid_t dataset, H5RType ref_type, const void *_ref);
611    herr_t H5Rget_obj_type2(hid_t id, H5RType ref_type, const void *_ref, H5OType *obj_type);
612    ssize_t H5Rget_name(hid_t loc_id, H5RType ref_type, const void *_ref, char *name/*out*/, size_t size);
613     hid_t H5Screate(H5SClass type);
614     hid_t H5Screate_simple(int rank, const hsize_t *dims,
615                            const hsize_t *maxdims);
616     herr_t H5Sset_extent_simple(hid_t space_id, int rank,
617                                 const hsize_t *dims,
618                                 const hsize_t *max);
619     hid_t H5Scopy(hid_t space_id);
620     herr_t H5Sclose(hid_t space_id);
621     herr_t H5Sencode(hid_t obj_id, void *buf, size_t *nalloc);
622     hid_t H5Sdecode(const void *buf);
623     hssize_t H5Sget_simple_extent_npoints(hid_t space_id);
624     int H5Sget_simple_extent_ndims(hid_t space_id);
625     int H5Sget_simple_extent_dims(hid_t space_id, hsize_t *dims,
626                                   hsize_t *maxdims);
627     htri_t H5Sis_simple(hid_t space_id);
628     hssize_t H5Sget_select_npoints(hid_t spaceid);
629     herr_t H5Sselect_hyperslab(hid_t space_id, H5SSeloper op,
630                                const hsize_t *start,
631                                const hsize_t *_stride,
632                                const hsize_t *count,
633                                const hsize_t *_block);
634     hid_t H5Scombine_hyperslab(hid_t space_id, H5SSeloper op,
635                                const hsize_t *start,
636                                const hsize_t *_stride,
637                                const hsize_t *count,
638                                const hsize_t *_block);
639     herr_t H5Sselect_select(hid_t space1_id, H5SSeloper op,
640                             hid_t space2_id);
641     hid_t H5Scombine_select(hid_t space1_id, H5SSeloper op,
642                             hid_t space2_id);
643     herr_t H5Sselect_elements(hid_t space_id, H5SSeloper op,
644                               size_t num_elem, const hsize_t *coord);
645     H5SClass H5Sget_simple_extent_type(hid_t space_id);
646     herr_t H5Sset_extent_none(hid_t space_id);
647     herr_t H5Sextent_copy(hid_t dst_id,hid_t src_id);
648     htri_t H5Sextent_equal(hid_t sid1, hid_t sid2);
649     herr_t H5Sselect_all(hid_t spaceid);
650     herr_t H5Sselect_none(hid_t spaceid);
651     herr_t H5Soffset_simple(hid_t space_id, const hssize_t *offset);
652     htri_t H5Sselect_valid(hid_t spaceid);
653     hssize_t H5Sget_select_hyper_nblocks(hid_t spaceid);
654     hssize_t H5Sget_select_elem_npoints(hid_t spaceid);
655     herr_t H5Sget_select_hyper_blocklist(hid_t spaceid, hsize_t startblock,
656                                          hsize_t numblocks, hsize_t *buf);
657     herr_t H5Sget_select_elem_pointlist(hid_t spaceid, hsize_t startpoint,
658                                         hsize_t numpoints, hsize_t *buf);
659     herr_t H5Sget_select_bounds(hid_t spaceid, hsize_t *start,
660                                 hsize_t *end);
661     H5S_sel_type H5Sget_select_type(hid_t spaceid);
662 
663 
664     /* Operations defined on all datatypes */
665     hid_t H5Tcreate(H5TClass type, size_t size);
666     hid_t H5Tcopy(hid_t type_id);
667     herr_t H5Tclose(hid_t type_id);
668     htri_t H5Tequal(hid_t type1_id, hid_t type2_id);
669     herr_t H5Tlock(hid_t type_id);
670     herr_t H5Tcommit2(hid_t loc_id, const char *name, hid_t type_id,
671         hid_t lcpl_id, hid_t tcpl_id, hid_t tapl_id);
672     hid_t H5Topen2(hid_t loc_id, const char *name, hid_t tapl_id);
673     herr_t H5Tcommit_anon(hid_t loc_id, hid_t type_id, hid_t tcpl_id, hid_t tapl_id);
674     hid_t H5Tget_create_plist(hid_t type_id);
675     htri_t H5Tcommitted(hid_t type_id);
676     herr_t H5Tencode(hid_t obj_id, void *buf, size_t *nalloc);
677     hid_t H5Tdecode(const void *buf);
678 
679     /* Operations defined on compound datatypes */
680     herr_t H5Tinsert(hid_t parent_id, const char *name, size_t offset,
681                  hid_t member_id);
682     herr_t H5Tpack(hid_t type_id);
683 
684     /* Operations defined on enumeration datatypes */
685     hid_t H5Tenum_create(hid_t base_id);
686     herr_t H5Tenum_insert(hid_t type, const char *name, const void *value);
687     herr_t H5Tenum_nameof(hid_t type, const void *value, char *name/*out*/,
688                      size_t size);
689     herr_t H5Tenum_valueof(hid_t type, const char *name,
690                       void *value/*out*/);
691 
692     /* Operations defined on variable-length datatypes */
693     hid_t H5Tvlen_create(hid_t base_id);
694 
695     /* Operations defined on array datatypes */
696     hid_t H5Tarray_create2(hid_t base_id, uint ndims, const hsize_t[] dim);
697     int H5Tget_array_ndims(hid_t type_id);
698     int H5Tget_array_dims2(hid_t type_id, hsize_t* dims);
699 
700     /* Operations defined on opaque datatypes */
701     herr_t H5Tset_tag(hid_t type, const char *tag);
702     char *H5Tget_tag(hid_t type);
703 
704     /* Querying property values */
705     hid_t H5Tget_super(hid_t type);
706     H5TClass H5Tget_class(hid_t type_id);
707     htri_t H5Tdetect_class(hid_t type_id, H5TClass cls);
708     size_t H5Tget_size(hid_t type_id);
709     H5TByteOrder H5Tget_order(hid_t type_id);
710     size_t H5Tget_precision(hid_t type_id);
711     int H5Tget_offset(hid_t type_id);
712     herr_t H5Tget_pad(hid_t type_id, H5T_pad_t *lsb/*out*/,
713                   H5T_pad_t *msb/*out*/);
714     H5T_sign_t H5Tget_sign(hid_t type_id);
715     herr_t H5Tget_fields(hid_t type_id, size_t *spos/*out*/,
716                      size_t *epos/*out*/, size_t *esize/*out*/,
717                      size_t *mpos/*out*/, size_t *msize/*out*/);
718     size_t H5Tget_ebias(hid_t type_id);
719     H5T_norm_t H5Tget_norm(hid_t type_id);
720     H5T_pad_t H5Tget_inpad(hid_t type_id);
721     H5TString H5Tget_strpad(hid_t type_id);
722     int H5Tget_nmembers(hid_t type_id);
723     char *H5Tget_member_name(hid_t type_id, uint membno);
724     int H5Tget_member_index(hid_t type_id, const char *name);
725     size_t H5Tget_member_offset(hid_t type_id, uint membno);
726     H5TClass H5Tget_member_class(hid_t type_id, uint membno);
727     hid_t H5Tget_member_type(hid_t type_id, uint membno);
728     herr_t H5Tget_member_value(hid_t type_id, uint membno, void *value/*out*/);
729     H5TCset H5Tget_cset(hid_t type_id);
730     htri_t H5Tis_variable_str(hid_t type_id);
731     hid_t H5Tget_native_type(hid_t type_id, H5TDirection direction);
732 
733     /* Setting property values */
734     herr_t H5Tset_size(hid_t type_id, size_t size);
735     herr_t H5Tset_order(hid_t type_id, H5TByteOrder order);
736     herr_t H5Tset_precision(hid_t type_id, size_t prec);
737     herr_t H5Tset_offset(hid_t type_id, size_t offset);
738     herr_t H5Tset_pad(hid_t type_id, H5T_pad_t lsb, H5T_pad_t msb);
739     herr_t H5Tset_sign(hid_t type_id, H5T_sign_t sign);
740     herr_t H5Tset_fields(hid_t type_id, size_t spos, size_t epos,
741                      size_t esize, size_t mpos, size_t msize);
742     herr_t H5Tset_ebias(hid_t type_id, size_t ebias);
743     herr_t H5Tset_norm(hid_t type_id, H5T_norm_t norm);
744     herr_t H5Tset_inpad(hid_t type_id, H5T_pad_t pad);
745     herr_t H5Tset_cset(hid_t type_id, H5TCset cset);
746     herr_t H5Tset_strpad(hid_t type_id, H5TString strpad);
747 
748     /* Type conversion database */
749     herr_t H5Tregister(H5T_pers_t pers, const char *name, hid_t src_id,
750                    hid_t dst_id, H5T_conv_t func);
751     herr_t H5Tunregister(H5T_pers_t pers, const char *name, hid_t src_id,
752                      hid_t dst_id, H5T_conv_t func);
753     H5T_conv_t H5Tfind(hid_t src_id, hid_t dst_id, H5T_cdata_t **pcdata);
754     htri_t H5Tcompiler_conv(hid_t src_id, hid_t dst_id);
755     herr_t H5Tconvert(hid_t src_id, hid_t dst_id, size_t nelmts,
756                   void *buf, void *background, hid_t plist_id);
757     herr_t H5Zregister(const void *cls);
758     herr_t H5Zunregister(H5ZFilter id);
759     htri_t H5Zfilter_avail(H5ZFilter id);
760     herr_t H5Zget_filter_info(H5ZFilter filter, uint* filter_config_flags);
761 }